﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using TCC_Hotel.Repositorio;
using TCC_Hotel.Entidades.Basicas;
using System.Web.Caching;


namespace TCC_Hotel.Serviços
{
    public class GeralServices
    {
        GeralRepositorio repositorio = new GeralRepositorio();
        /// <summary>
        /// Consulta o repositorio e traz os cargos cadastrados
        /// </summary>
        /// <returns></returns>
        public List<String> GetCargos()
        {
            
            List<string> listaretorno = new List<string>();
            foreach (var item in repositorio.GetCargos())
            {
                listaretorno.Add(item.Nome);

            }
            return listaretorno;
        }

        /// <summary>
        /// Consulta o repositorio e traz as siglas dos estados
        /// </summary>
        /// <returns></returns>
        public List<Estado> GetEstados()
        {
             return repositorio.GetEstados();
        }

         /// <summary>
        /// recupera preco da diaria atravéz de um certo numero d hóspedes
        /// </summary>
        /// <returns>Preco da diaria</returns>
        public double RecuperarPrecoDiaria(int Numero)
        {
            return repositorio.RecuperarPrecoDiaria(Numero);
        }

        /// <summary>
        /// Verifica se a informação ja esta gravada em cache, se tiver recupera, 
        /// senao faz a consulta e grava em cache
        /// </summary>
        /// <returns>Lista de funcionarios</returns>
        public double RecuperarPrecoDiariaCache(int Numero)
        {
            double preco;

            //Verifica se a informação esta guardada em cache
            if (HttpContext.Current.Cache.Get("Preco_Diaria") == null)
            {
                //Consulta os preços no banco
                preco = RecuperarPrecoDiaria(Numero);

                //Armazena o preco em cache de 2 minutos para evitar muitas consultas ao banco
                HttpContext.Current.Cache.Add("Preco_Diaria", preco, null,
                                 DateTime.Now.AddMinutes(2), Cache.NoSlidingExpiration, CacheItemPriority.High, null);

            }

           //caso essa informaçao ja estiver no cache
            else
            {
                //Resgata informação do cache
                preco = (double)HttpContext.Current.Cache.Get("Preco_Diaria");

            }

            return preco;
        }
    }
}